package com.example.project10;

import android.text.TextUtils;
import java.util.regex.Pattern;

/**
 * 输入验证器
 * 负责验证用户输入的数据格式和有效性
 */
public class InputValidator {
    
    // ISBN-13 格式的正则表达式
    private static final Pattern ISBN_PATTERN = Pattern.compile("^978-\\d{1,5}-\\d{1,7}-\\d{1,7}-\\d{1}$");
    
    // 简化的书名验证：支持常见字符
    private static final int MAX_BOOK_NAME_LENGTH = 100;
    private static final int MIN_BOOK_NAME_LENGTH = 1;
    
    // 邮箱格式验证
    private static final Pattern EMAIL_PATTERN = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");
    
    /**
     * 验证书号
     * @param bookNumber 书号
     * @return 验证结果
     */
    public ValidationResult validateBookNumber(String bookNumber) {
        if (TextUtils.isEmpty(bookNumber)) {
            return ValidationResult.invalid("书号不能为空");
        }
        
        String trimmed = bookNumber.trim();
        if (trimmed.length() < 10) {
            return ValidationResult.invalid("书号长度不能少于10位");
        }
        
        if (trimmed.length() > 17) {
            return ValidationResult.invalid("书号长度不能超过17位");
        }
        
        return ValidationResult.valid();
    }
    
    /**
     * 验证书名
     * @param bookName 书名
     * @return 验证结果
     */
    public ValidationResult validateBookName(String bookName) {
        if (TextUtils.isEmpty(bookName)) {
            return ValidationResult.invalid("书名不能为空");
        }
        
        String trimmed = bookName.trim();
        if (trimmed.length() < MIN_BOOK_NAME_LENGTH) {
            return ValidationResult.invalid("书名不能为空");
        }
        
        if (trimmed.length() > MAX_BOOK_NAME_LENGTH) {
            return ValidationResult.invalid("书名长度不能超过" + MAX_BOOK_NAME_LENGTH + "个字符");
        }
        
        // 检查是否只包含空白字符
        if (trimmed.matches("^\\s+$")) {
            return ValidationResult.invalid("书名不能只包含空格");
        }
        
        return ValidationResult.valid();
    }
    
    /**
     * 验证用户邮箱
     * @param userEmail 用户邮箱
     * @return 验证结果
     */
    public ValidationResult validateUserEmail(String userEmail) {
        if (TextUtils.isEmpty(userEmail)) {
            return ValidationResult.invalid("用户邮箱不能为空");
        }
        
        String trimmed = userEmail.trim();
        if (!EMAIL_PATTERN.matcher(trimmed).matches()) {
            return ValidationResult.invalid("无效的邮箱格式");
        }
        
        return ValidationResult.valid();
    }
    
    /**
     * 验证搜索关键词
     * @param keyword 搜索关键词
     * @return 验证结果
     */
    public ValidationResult validateSearchKeyword(String keyword) {
        if (TextUtils.isEmpty(keyword)) {
            return ValidationResult.valid(); // 空搜索条件是允许的
        }
        
        String trimmed = keyword.trim();
        if (trimmed.length() > 50) {
            return ValidationResult.invalid("搜索关键词长度不能超过50个字符");
        }
        
        return ValidationResult.valid();
    }
    
    /**
     * 验证结果类
     */
    public static class ValidationResult {
        private final boolean valid;
        private final String errorMessage;
        
        private ValidationResult(boolean valid, String errorMessage) {
            this.valid = valid;
            this.errorMessage = errorMessage;
        }
        
        public static ValidationResult valid() {
            return new ValidationResult(true, null);
        }
        
        public static ValidationResult invalid(String errorMessage) {
            return new ValidationResult(false, errorMessage);
        }
        
        public boolean isValid() {
            return valid;
        }
        
        public String getErrorMessage() {
            return errorMessage != null ? errorMessage : "";
        }
    }
    
    /**
     * 清理和规范化书名输入
     * @param bookName 原始书名
     * @return 规范化后的书名
     */
    public String normalizeBookName(String bookName) {
        if (TextUtils.isEmpty(bookName)) {
            return "";
        }
        
        // 去除首尾空格
        String normalized = bookName.trim();
        
        // 将多个连续空格替换为单个空格
        normalized = normalized.replaceAll("\\s+", " ");
        
        return normalized;
    }
    
    /**
     * 清理和规范化书号输入
     * @param bookNumber 原始书号
     * @return 规范化后的书号
     */
    public String normalizeBookNumber(String bookNumber) {
        if (TextUtils.isEmpty(bookNumber)) {
            return "";
        }
        
        // 去除首尾空格和不可见字符
        String normalized = bookNumber.trim();
        
        // 移除不必要的字符
        normalized = normalized.replaceAll("[\\s\\r\\n\\t]", "");
        
        return normalized;
    }
}